package com.nehc.nettyserver.service.storage;

import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;

/**
 * 存储服务接口
 * 
 * @author NEHC
 * @date 2023-04-02
 */
public interface StorageService {
    
    /**
     * 保存对象
     * 
     * @param key 键
     * @param value 值
     * @return 是否成功
     */
    boolean save(String key, Object value);
    
    /**
     * 异步保存对象
     * 
     * @param key 键
     * @param value 值
     * @return 异步操作结果
     */
    CompletableFuture<Boolean> saveAsync(String key, Object value);
    
    /**
     * 获取对象
     * 
     * @param key 键
     * @param type 对象类型
     * @return 对象
     */
    <T> Optional<T> get(String key, Class<T> type);
    
    /**
     * 删除对象
     * 
     * @param key 键
     * @return 是否成功
     */
    boolean delete(String key);
    
    /**
     * 获取所有键
     * 
     * @return 键列表
     */
    List<String> getAllKeys();
    
    /**
     * 清空存储
     * 
     * @return 是否成功
     */
    boolean clear();
    
    /**
     * 获取存储大小
     * 
     * @return 存储大小
     */
    long size();
    
    /**
     * 获取所有对象
     * 
     * @param clazz 对象类型
     * @param <T> 对象类型
     * @return 对象列表
     * @throws IOException IO异常
     */
    <T> List<T> getAll(Class<T> clazz) throws IOException;
    
    /**
     * 清空所有对象
     * 
     * @param clazz 对象类型
     * @return 是否成功
     * @throws IOException IO异常
     */
    <T> boolean clear(Class<T> clazz) throws IOException;
    
    /**
     * 备份数据
     * 
     * @return 是否成功
     * @throws IOException IO异常
     */
    boolean backup() throws IOException;
} 